﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;
using Sinacor.Infra.UI.Messaging.SmartClient;
using Sinacor.Infra.UI.Messaging.Internal;
using Sinacor.Infra.UI.Messaging;

namespace Sinacor.Infra.UI.Controls.SmartClient
{
    /// <summary>
    /// Representa o ícone apresentado no Systray.
    /// </summary>
    public class SinacorSystrayIcon : IDisposable 
    {
        NotifyIcon _icon;       //declaração do ícone.

        /// <summary>
        /// Construtor do ícone
        /// Responsável por definir as propriedades e eventos iniciais do ícone.
        /// </summary>
        public SinacorSystrayIcon()
        {
            //Cria uma nova instância para o ícone.
            _icon = new NotifyIcon();
            //Define os eventos do ícone.
            _icon.MouseDoubleClick += new MouseEventHandler(Icon_MouseDoubleClick);
        }

        /// <summary>
        /// Construtor do ícone
        /// Responsável por definir as propriedades e eventos iniciais do ícone.
        /// </summary>
        public SinacorSystrayIcon(Icon icon)
            : this()
        {
            this.Icon = icon;
        }

        /// <summary>
        /// Handler do evento MouseDoubleClick
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Icon_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            //throw new NotImplementedException();
            WPFMessageManager m = new WPFMessageManager();
            InternalMessage im = new InternalMessage();
            im.MessageId = MessageIds.Menu.SNC_MENU_RESTORE;
            m.SendMessage(im);
        }

        /// <summary>
        /// Mostra o ícone no Systray
        /// </summary>
        public void Show()
        {
            //Torna o Ícone visível
            _icon.Visible = true;
        }

        /// <summary>
        /// Esconde o ícone do Systray
        /// </summary>
        public void Hide()
        {
            //Torna o Ícone do Systray invisível
            _icon.Visible = false;
        }

        /// <summary>
        /// Define o ícone que aparecerá no Systray
        /// </summary>
        public Icon Icon
        {
            get { return _icon.Icon; }
            set { _icon.Icon = value; }
        }
        
        /// <summary>
        /// Tooltip do icone
        /// </summary>
        public string ToolTip
        {
            get 
            {
                return _icon.Text;
            }
            set
            {
                _icon.Text = value;
            }
        }

        #region IDisposable Members

        /// <summary>
        /// Trata o Dispose da Aplicação
        /// </summary>
        public void Dispose()
        {
            _icon.Dispose();
        }

        #endregion
    }


}
